import request from "../../utils/request"

// pages/player/index.js
Page({
  player: null,

  /**
   * 页面的初始数据
   */
  data: {
    //当前歌曲的id
    songId: 0,
    //当前播放器的状态，通过播放器的状态来修改，不能直接修改
    isPlay: false,
    // 当前播放歌曲的详情
    song: '',
    // 当前播放的歌曲的url
    url: ''
  },
  //暂停与播放的按钮
  musicPlayHandle() {
    //通过判断isPlay来判断当前是暂停还是播放，如果播放则暂停反之亦然
    if (this.data.isPlay) {
      //播放器暂停的回调
      this.player.pause()
    } else {
      //播放器播放的回调
      this.player.play()
    }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    //进行播放器的初始化
    //获取后台播放器实例对象
    this.player = wx.getBackgroundAudioManager();
    //监听播放器的各种事件
    //播放器开始播放音乐的时候触发
    this.player.onPlay(() => {
      this.setData({
        isPlay: true
      })
    })
    //播放器暂停的时候
    this.player.onPause(() => {
      this.setData({
        isPlay: false
      })
    })
    // 播放器停止的时候
    this.player.onStop(() => {
      this.setData({
        isPlay: false
      })
    })
    //进入到页面的时候获取歌曲信息，url执行播放
    this.getSongDetailAndUrlAndPlay(options.id)
    //下一首的事件回调
    getApp().myEvent.on("nextId", (nextId) => {
      this.getSongDetailAndUrlAndPlay(nextId)
    })
    // 上一首的事件回调
    getApp().myEvent.on("prevId", (prevId) => {
      this.getSongDetailAndUrlAndPlay(prevId)
    })
  },
  //封装根据传入的歌曲 id 获取歌曲的详情与歌曲的url，并播放的函数，在初始化和切歌的时候使用
  async getSongDetailAndUrlAndPlay(songId) {
    //歌曲的详情与歌曲的链接是需要分别请求的
    const detailResult = await request('/song/detail', {
      ids: songId
    })
    const urlResult = await request('/song/url', {
      id: songId
    })
    //将数据存到data中
    this.setData({
      songId,
      song: detailResult.songs[0],
      url: urlResult.data[0].url,
    })
    //设置播放器的src和title，播放器就可以播放指定的音乐
    this.player.src = this.data.url
    this.player.title = this.data.song
  },
  // 上一首下一首的点击事件
  switchHandle(event) {
    // type为按钮的事件类型下一首或者上一首
    const type = event.currentTarget.id
    //歌曲的id，通过id拿到上一首下一首的id，第1首的时候则什么也不干
    const songId = this.data.songId
    // 通过事件总线通知推荐页，将上一首下一首的id传入
    switch (type) {
      case "next":
        getApp().myEvent.emit(type, songId)
      case "prev":
        getApp().myEvent.emit(type, songId)
    }
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})